pencil.m
This program calculates the equilibrium value functions from the pencil-and-paper example. LaTeX/TikZ uses the results to create Figure 2 of Abbring and Campbell's ``Last-In First-Out Oligopoly Dynamics''.
Contents
Clean up
close all
clc
clear
Set parameter values
beta=1.05^(-5); kappa=1.25; phi=@(N) 1; pi = @(N) 2-2*(N>2); chat=0.1; ccheck=2.5; lambda=0.1;
Solve the second firm's dynamic programming problem.
%Define the mapping from vtilde to cunderbar cunderbar = @(vtilde) min(max((-lambda*vtilde+(1-lambda)*kappa)/((1-lambda)*pi(2)/2),chat),ccheck); %Define the mapping from vtilde to vtildeprime. vtildeprime = @(vtilde) ((ccheck+chat)/2)*pi(2)/2 - kappa + ... beta*((1-lambda)*(ccheck^2*pi(2)/4-kappa*ccheck)+lambda*vtilde*ccheck - ... ((1-lambda)*(cunderbar(vtilde)^2*pi(2)/4-kappa*cunderbar(vtilde))+lambda*vtilde*cunderbar(vtilde)))... /((ccheck-chat)*(1-beta*(1-lambda))); % Iterate beginning with vtilde=0 vtilde0=1; vtilde1=0; while abs(vtilde0-vtilde1)>1e-5 vtilde0=vtilde1; vtilde1=vtildeprime(vtilde0); end % Assign the resulting thresholds and continuation values to their variables. vtilde2=vtilde0; cunderbar2=cunderbar(vtilde0); coverbar2=min((-lambda*vtilde2+(1-lambda)*kappa+phi(2)*(1-beta*(1-lambda))/beta)/((1-lambda)*pi(2)/2),ccheck);
Solve the first firm's dynamic programming problem.
% Define the mapping from vtilde to cunderbar cunderbar = @(vtilde) max(((1-lambda)*kappa-lambda*vtilde(1))/((1-lambda)*pi(1)),chat); % Define the mapping from vtilde to vtildeprime vtildeprime1 = @(vtilde) ((chat+ccheck)/2)*pi(1) - kappa + ... beta*((1-lambda)*(coverbar2^2*pi(1)/2-kappa*coverbar2)+lambda*vtilde(1)*coverbar2... -((1-lambda)*(cunderbar(vtilde)^2*pi(1)/2-kappa*cunderbar(vtilde))+lambda*vtilde(1)*cunderbar(vtilde)) ... +(1-lambda)*(ccheck^2*pi(2)/4-kappa*ccheck)+lambda*vtilde(2)*ccheck ... -((1-lambda)*(coverbar2^2*pi(2)/4-kappa*coverbar2)+lambda*vtilde(2)*coverbar2))... /((1-beta*(1-lambda))*(ccheck-chat)); vtildeprime2 = @(vtilde) ((chat+ccheck)/2)*pi(2)/2 - kappa + ... beta*((1-lambda)*(cunderbar2^2*pi(1)/2-kappa*cunderbar2)+lambda*vtilde(1)*cunderbar2... -((1-lambda)*(cunderbar(vtilde)^2*pi(1)/2-kappa*cunderbar(vtilde))+lambda*vtilde(1)*cunderbar(vtilde)) ... +(1-lambda)*(ccheck^2*pi(2)/4-kappa*ccheck)+lambda*vtilde(2)*ccheck ... -((1-lambda)*(cunderbar2^2*pi(2)/4-kappa*cunderbar2)+lambda*vtilde(2)*cunderbar2))... /((1-beta*(1-lambda))*(ccheck-chat)); vtildeprime = @(vtilde) [vtildeprime1(vtilde) vtildeprime2(vtilde)]; % Iterate beginning with vtilde = [vtilde2 vtilde2]; vtilde0=zeros(1,2); vtilde1=[vtilde2 vtilde2]; while max(abs(vtilde0-vtilde1))>1e-5 vtilde0=vtilde1; vtilde1=vtildeprime(vtilde0); end % Assign the resulting thresholds and continuation values to their variables. clear vtilde0 cunderbar1=cunderbar(vtilde1); coverbar1 = min((-lambda*vtilde1(1)+(1-lambda)*kappa+phi(1)*(1-beta*(1-lambda))/beta)/((1-lambda)*pi(1)),ccheck);
Calculate value function points for plotting.
%Calculate the highest point of the monopoly branch v11coverbar2=beta*((1-lambda)*(coverbar2*pi(1)-kappa)+lambda*vtilde1(1))/(1-beta*(1-lambda)); %Calculate the lowest and highest points of the duopoly branch v12cunderbartwo=beta*((1-lambda)*(cunderbar2*pi(2)/2-kappa)+lambda*vtilde1(2))/(1-beta*(1-lambda)); v12ccheck=beta*((1-lambda)*(ccheck*pi(2)/2-kappa)+lambda*vtilde1(2))/(1-beta*(1-lambda)); %Calculate the highest point of the second entrant's value function v2ccheck=beta*((1-lambda)*(ccheck*pi(2)/2-kappa)+lambda*vtilde2)/(1-beta*(1-lambda));
Export the equilibrium calculations to LaTeX macros for use by TikZ for creating Figure 2.
f1=fopen('ac2aPencilConstants.tex','w'); fprintf(f1,'\\def\\pencilChat{%3.2f}\n',chat); fprintf(f1,'\\def\\pencilCcheck{%3.2f}\n',ccheck); fprintf(f1,'\\def\\pencilPiTwo{%3.2f}\n',pi(2)); fprintf(f1,'\\def\\pencilPiOne{%3.2f}\n',pi(1)); fprintf(f1,'\\def\\pencilPhiTwo{%3.2f}\n',phi(2)); fprintf(f1,'\\def\\pencilPhiOne{%3.2f}\n',phi(1)); fprintf(f1,'\\def\\pencilCunderbarTwo{%3.2f}\n',cunderbar2); fprintf(f1,'\\def\\pencilCoverbarTwo{%3.2f}\n',coverbar2); fprintf(f1,'\\def\\pencilCunderbarOne{%3.2f}\n',cunderbar1); fprintf(f1,'\\def\\pencilCoverbarOne{%3.2f}\n',coverbar1); fprintf(f1,'\\def\\pencilVOneOneCoverbarTwo{%3.2f}\n',v11coverbar2); fprintf(f1,'\\def\\pencilVOneTwoCunderbarTwo{%3.2f}\n',v12cunderbartwo); fprintf(f1,'\\def\\pencilVOneTwoCcheck{%3.2f}\n',v12ccheck); fprintf(f1,'\\def\\pencilVTwoCcheck{%3.2f}\n',v2ccheck); fclose(f1);